package util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.jasypt.util.text.BasicTextEncryptor;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.authentication.encoding.PasswordEncoder;
import org.springframework.util.DigestUtils;
//import sun.misc.BASE64Encoder;
/**
 *
 * @author marcelo
 */
public class EncriptaSenha 
{
    private BasicTextEncryptor basicTextEncryptor;
    
    public EncriptaSenha()
    {
        this.basicTextEncryptor = new BasicTextEncryptor();
        this.basicTextEncryptor.setPassword("default");
    }
    
    public String cifrar(String senha) 
    {
        
        //criamos uma String que recebe a senha criptografada
        String seuTextoCriptografado = this.basicTextEncryptor.encrypt(senha);
        //System.out.println("Texto criptografado = " + seuTextoCriptografado);
        this.decifrar(seuTextoCriptografado);
 
        //criamos uma String que recebe a senha descriptografada
        //String seuTextoNovamenteDescriptografado = this.basicTextEncryptor.decrypt(seuTextoCriptografado);
        //System.out.println("Texto descriptografado  = " + seuTextoNovamenteDescriptografado);
        return this.basicTextEncryptor.encrypt(senha);
 
    }
    
    public String decifrar(String senha) 
    {
        String senhaDecifrada = null;
        try {
            senhaDecifrada = this.basicTextEncryptor.decrypt(senha);
            return senhaDecifrada;
        }
        catch (Exception ns) {
            System.out.println("Excessão gerada pelo método de encriptação: " + ns.getMessage());
        }
        return senhaDecifrada;
    }
    
    public static String encriptaMD5(String senha) throws NoSuchAlgorithmException, UnsupportedEncodingException
    {
        if (senha.length()==0) {
            return null;
        }
        else {
            MessageDigest md = MessageDigest.getInstance("MD5");
            //md.update(senha.getBytes());
            //byte[] hash = md.digest();
            //StringBuilder senhaEncrip = new StringBuilder();
            /*
             * for (int i=0;i<hash.length;i++)
               {senhaEncrip.append(Integer.toHexString(hash[i]&0xff));}
             */
            byte[] messageDigest = md.digest("senha".getBytes("UTF-8"));
            StringBuilder senhaEncrip = new StringBuilder();
            for (byte b : messageDigest) {
                senhaEncrip.append(String.format("%02X", 0xFF & b));
            }
            return senhaEncrip.toString();
        }
    }
    
    /*
    @SuppressWarnings("CallToThreadDumpStack")
    public static String encripta (String senha)
    {
        try
        {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.update(senha.getBytes());
            BASE64Encoder encoder = new BASE64Encoder ();
            return encoder.encode (digest.digest ());
        }
        catch (NoSuchAlgorithmException ns)
        {
            ns.printStackTrace ();
            return senha;
        }
    }
    */
    public static String encriptar(String senha) 
    {
        PasswordEncoder encoder = new Md5PasswordEncoder();
        String senhaCripto = encoder.encodePassword(senha, null);
        return senhaCripto;
    }
    
    public static String cifraPorSpring(String senha)
    {
        String senhaCripto = DigestUtils.md5DigestAsHex(senha.getBytes());
        return senhaCripto;
    }
}
